package org.club.Service;

import org.club.common.model.dto.*;
import org.club.common.model.entity.Activity;
import org.club.common.model.entity.ClubMemberInfo;
import org.club.common.model.vo.*;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@Service
public interface ActivityService {
    //查询社团详细信息
    CommunityDetailsVo selectClubsTest(Long id);
    //创建活动
    void createActivity(ActivityRequest request, MultipartFile file);
    /**
     * 查询活动列表
     *
     * @param activityQueryDTO
     * @return 活动列表
     */
    List<ActivitiesVO> searchActivities(ActivityQueryDTO activityQueryDTO);
    //修改活动
    void updateActivity(ActivityRequest request, MultipartFile file);
    //删除活动
    void deleteActivities(Long ids);
//查看活动报名情况
    List<ApplicantsVO> getRegistration(Long activityId);
//审核活动报名
    void reviewRegistrations(List<Long> userIds, Integer status, Long activityId);
//获取社团用户
    List<ClubMemberInfo> getClubsUser(ClubMemberInfoDto clubMemberInfoDto);

    /**
     * 导出社团成员
     * @param clubMemberInfoDto 包含导出参数和格式
     * @return 文件字节数组
     */
    byte[] exportMembers(ClubMemberInfoDto clubMemberInfoDto);

    /**
     * 导出报名列表
     * @param request 包含活动ID、用户ID列表和导出格式
     * @return 文件字节数组
     */
    byte[] exportRegistrations(RegistrationExportRequest request);
//移除用户
    void removeMember(RemoveMemberDto removeMemberDto);
//获取社团公告
    List<AnnouncementVO> getCommunityAnnouncements(ClubsAnnouncementDto clubAdminId);
//获取社团用户ID
    List<Long> getClubsUserId(Long clubId);



    //定时任务
    /**
     * 更新活动状态
     * @param activityId 活动ID
     * @param status 新状态
     * @return 是否更新成功
     */
    boolean updateActivityStatus(Long activityId, Integer status);

    /**
     * 获取所有已发布的活动
     * @return 活动列表
     */
    List<Activity> getAllPublishedActivities();

    /**
     * 检查并更新已结束的活动状态
     */
    void checkAndUpdateEndedActivities();
    /**
     * 获取所有未发布的活动
     * @return 活动列表
     */
    List<Activity> getAllUnpublishedActivities();

    /**
     * 检查并更新应该开始的活动状态
     */
    void checkAndUpdateStartingActivities();

    /**
     * 更新社团信息
     * @param literatureClub 社团信息
     * @param file 社团封面图片
     */
    void updateClubInfo(LiteratureClubDto literatureClub, MultipartFile file);
//发布评论
    void createComment(ActivityCommentDTO commentDTO);
//获取评论
    List<ActivityCommentVO> getComments(Long activityId);
//获取有关社团的消息
    List<MessageVO> getMessages(Long adminId, Integer readStatus);
//更新消息已读状态
    void updateMessageReadStatus(UpdateMessageReadStatusDto updateMessageReadStatusDto);
//获取消息已读数和未读数
    MessageSummaryVO getAnnouncementReadCounts(AnnouncementReadCountsDto announcementReadCountsDto);
//更新个人资料
    UserVo updatePersonalInfo(UpdatePersonalInfoRequestDto updatePersonalInfoRequestDto, MultipartFile file);

    ActivityRegistrationReviewVO getApplicants(Long activityId);
}
